#getting-started
Welcome! This guide gets you from zero to productive with SilverBullet in about five minutes.
The fastest way to get started is with Docker:
docker run -p 3000:3000 -v ./space:/space ghcr.io/silverbulletmd/silverbullet
Or download the Install/Binary|single binary and run it:
silverbullet ./space
Now open http://localhost:3000 in your browser.
note Tip For a full breakdown of installation options, see Install.
Click the page icon in the Top Bar (or press Cmd-k / Ctrl-k) to open the Page Picker. Type a page name like "My First Page" and press Enter — SilverBullet creates it instantly.
Start typing. Everything is Markdown.
Type [ to link to another page. SilverBullet autocompletes page names for you. Links are bi-directional: the linked page will show a [Linked Mention back to the page you're writing.
Tag a page by adding a hashtag on an empty line (see Markdown/Hashtags#Scope rules), for instance #project. Or add structured data using Frontmatter at the top of a page:
---
status: active
priority: high
tags: project
---
These attributes become queryable, which we’re going to do next.
Pages in SilverBullet can use Space Lua and Space Lua/Lua Integrated Query feature specifically to dynamically generate content. Add this to any page:
${query[from tags.page limit 5](from tags.page limit 5)}
As you move your mouse cursor outside this code fragment, it renders a live table of your pages, right inline. Queries update as your space changes dynamically.
Now, let’s write a query that finds all your pages tagged with #project (as done in the previous step) filtered on only high priority ones:
${query[from p = tags.project where p.priority == "high"](from p = tags.project where p.priority == "high")}
By default, queries are rendered as tables, however you can render them in other ways as well. SilverBullet comes with a set of pre-defined ^Library/Std/Infrastructure/Query Templates you can use, for instance:
# High qriority projects
${template.each(query[
from p = tags.project
where p.priority == "high"
order by p.lastModified desc
](
from p = tags.project
where p.priority == "high"
order by p.lastModified desc
), templates.pageItem)}
This renders your 5 most recently updated high-priority projects as a bulleted list (an item in SilverBullet parlance).
Of course, you can also create custom templates. Either as reusable Lua functions, or inline:
# High qriority projects
${template.each(query[
from p = tags.project
where p.priority == "high"
order by p.lastModified desc
](
from p = tags.project
where p.priority == "high"
order by p.lastModified desc
), template.new[==[
* ${name} (status: ${status})
]==])}
Now that you know the basics, explore these guides for real-world workflows: